function   [y,A,x0,index]=wqsignalDOA(M,N,K,flip)


% M=30;			%观测矩阵的行数为30	
% N=64;			%观测矩阵的列数为64
% K=5;			%N维稀疏向量x的非零值的个数为5
% flip=7;		%加入y中的离散群值的个数为7

%%%%%%%%%%%%%%%%%%  generate a random signal x0 %%%%%%%%%%%%%%%%%%%%%%%%%
%产生一个高纬稀疏的信号x0
        L_L=[0:N-1]';      
%       xw=random('unif',0,2*pi,1,N);          
        xw=2*pi/N*[0:(N-1)];
		%对0到2π采样N个点
        xw=sort(xw);
		%sort对数组元素按升序排序
        L1=randperm(N,M);
		%randperm(n,m) 返回m维行向量，其中包含在 1 到N（包括二者）之间随机选择的 M 个唯一整数。
		
        A1=exp(1i*L_L*xw);     
		%乘出一个N*N的矩阵再取指数
        A=A1(L1,:);
        %从A1中按L1的序号抽出M行
        x0= zeros(N,1);
		%x0为N行1列的0向量
        rp = randperm(N,K);       
		%randperm(n,k) 返回1*k的行向量，其中包含在 1 到 n（包括二者）之间随机选择的 k 个唯一整数。
        theta=random('unif',0,2*pi,K,1);
		%以均匀分布从0到2π中选出一个k行1列的矩阵
        x0(rp) = exp(i*theta);
		%将theta取复数后分散到x0上（x0是N维列信号，theta是k维列满秩信号，k<N)
		%这么做之后x0就是一个稀疏信号
		%x0(rp) = randn(K,1);
		
        y=A*x0;        
		%算出观测值
        y1=y;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%generate Gaussian distribution noise %%%%%%%%%%%%%%%%%%%%
%产生高斯噪声，将离散群值加入到
 noise=0*normrnd(0,0.1,M,1);    
		%normrnd(mu,sigma，M,N)从均值为mu标准方差为sigma的正太分布中抽取一个M行N列的矩阵 
		%这里加的是高斯白噪声
		%乘以0表示没有加入高斯噪声
  index=randperm(M,flip);
  		%randperm(M,flip) 返回1*flip的行向量，其中包含在 1 到 M（包括二者）之间随机选择的 flip 个唯一整数。
  y(index)=random('unif',-10,10,flip,1)+y(index);
		%对y（index）处的信号施加噪声
		%y是M*1列信号，在其中的随机flip维加噪声
		%random('unif',-10,10,flip,1)以均匀分布从-10到10中选出一个flip行1列的矩阵
		%这里加的是突发噪声、比如开关突然打开
		
 y=y+noise;                      %added with noise 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%